home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1995.rar / 1995 / DEC / DI9512DF / carddeck.pas < prev    next >
Pascal/Delphi Source File  |  1995-09-13  |  14KB  |  480 lines

  1. {Written by David R. Faulkner, June 1995}
  2. {P.O. Box 434, Kula HI, 96790}
  3. {CIS: 76116,3513}
  4. {Internet: davef@maui.net}
  5.  
  6. {The following line tells the compiler to link the CARDDECK.RES resource
  7. file into the executable.  This does not give the compiler any information
  8. that it can use to check for syntax errors, but does make the resources
  9. contained within the file available at runtime.  Since the file is
  10. physically included in the .EXE, it does not have to be shipped with the
  11. final application}
  12. {$R CARDDECK.RES}
  13.  
  14.  
  15. unit CardDeck;
  16.  
  17. interface
  18.  
  19. {SysUtils for strpcopy...
  20. WinProcs for LoadBitmap...
  21. Classes for GetValue,Create...
  22. Graphics for TBitmap,Tcolor...
  23. Control for TGraphicControl
  24. DsgnIntf for TIntegerProperty}
  25.  
  26. uses SysUtils, WinProcs, Classes, Graphics, Controls, DsgnIntf;
  27.  
  28. {this next sections declares a bunch of constants the programmer can use
  29. in their code to make it more readable}
  30. const
  31.   cdAceofSpades    = 1;
  32.   cd2ofSpades      = 2;
  33.   cd3ofSpades      = 3;
  34.   cd4ofSpades      = 4;
  35.   cd5ofSpades      = 5;
  36.   cd6ofSpades      = 6;
  37.   cd7ofSpades      = 7;
  38.   cd8ofSpades      = 8;
  39.   cd9ofSpades      = 9;
  40.   cd10ofSpades     =10;
  41.   cdJackofSpades   =11;
  42.   cdQueenofSpades  =12;
  43.   cdKingofSpades   =13;
  44.  
  45.   cdAceofHearts    =14;
  46.   cd2ofHearts      =15;
  47.   cd3ofHearts      =16;
  48.   cd4ofHearts      =17;
  49.   cd5ofHearts      =18;
  50.   cd6ofHearts      =19;
  51.   cd7ofHearts      =20;
  52.   cd8ofHearts      =21;
  53.   cd9ofHearts      =22;
  54.   cd10ofHearts     =23;
  55.   cdJackofHearts   =24;
  56.   cdQueenofHearts  =25;
  57.   cdKingofHearts   =26;
  58.  
  59.   cdAceofClubs     =27;
  60.   cd2ofClubs       =28;
  61.   cd3ofClubs       =29;
  62.   cd4ofClubs       =30;
  63.   cd5ofClubs       =31;
  64.   cd6ofClubs       =32;
  65.   cd7ofClubs       =33;
  66.   cd8ofClubs       =34;
  67.   cd9ofClubs       =35;
  68.   cd10ofClubs      =36;
  69.   cdJackofClubs    =37;
  70.   cdQueenofClubs   =38;
  71.   cdKingofClubs    =39;
  72.  
  73.   cdAceofDiamonds  =40;
  74.   cd2ofDiamonds    =41;
  75.   cd3ofDiamonds    =42;
  76.   cd4ofDiamonds    =43;
  77.   cd5ofDiamonds    =44;
  78.   cd6ofDiamonds    =45;
  79.   cd7ofDiamonds    =46;
  80.   cd8ofDiamonds    =47;
  81.   cd9ofDiamonds    =48;
  82.   cd10ofDiamonds   =49;
  83.   cdJackofDiamonds =50;
  84.   cdQueenofDiamonds=51;
  85.   cdKingofDiamonds =52;
  86.  
  87.   CdJoker          =53;
  88.   cdCardBack1      =54;
  89.   cdCardBack2      =55;
  90.   cdCardBack3      =56;
  91.   cdCardBack4      =57;
  92.   cdCardBack5      =58;
  93.   cdCardBack6      =59;
  94.   cdCardBack7      =60;
  95.   cdCardBack8      =61;
  96.   cdCardBack9      =62;
  97.  
  98.   cdFaceCards = [1,11..14,24..27,37..40,50..52];
  99.  
  100.   cdSpades        = [1..13];
  101.   cdHearts        = [14..26];
  102.   cdClubs         = [27..39];
  103.   cdDiamonds      = [40..52];
  104.  
  105.   cdBlackCards    = [1..13,27..39];
  106.   cdRedCards      = [14..26,40..52];
  107.  
  108.   {use numeric values to represent suits}
  109.   cdSpade   = 1;
  110.   cdHeart   = 2;
  111.   cdClub    = 3;
  112.   cdDiamond = 4;
  113.  
  114.   {use numeric values to represent card colors}
  115.   cdBlack         = 1;
  116.   cdRed           = 2;
  117.  
  118. Type
  119.   cdCardDeck = 1..62;  {52 cards + 1 joker + 9 backs}
  120.  
  121. {the following type makes making a custom property editor that excepts both
  122. card names or card numbers a lot easier}
  123. type
  124.   TCardEntry = record
  125.     Value: cdCardDeck;
  126.     Name: string[18];
  127.   end;
  128.  
  129. {fhe follow array maps card numbers to card names}
  130. const
  131.   Cards: array[1..62] of TCardEntry = (
  132.     (Value: cdAceofSpades;     Name: 'cdAceofSpades'),
  133.     (Value: cd2ofSpades;       Name: 'cd2ofSpades'),
  134.     (Value: cd3ofSpades;       Name: 'cd3ofSpades'),
  135.     (Value: cd4ofSpades;       Name: 'cd4ofSpades'),
  136.     (Value: cd5ofSpades;       Name: 'cd5ofSpades'),
  137.     (Value: cd6ofSpades;       Name: 'cd6ofSpades'),
  138.     (Value: cd7ofSpades;       Name: 'cd7ofSpades'),
  139.     (Value: cd8ofSpades;       Name: 'cd8ofSpades'),
  140.     (Value: cd9ofSpades;       Name: 'cd9ofSpades'),
  141.     (Value: cd10ofSpades;      Name: 'cd10ofSpades'),
  142.     (Value: cdJackofSpades;    Name: 'cdJackofSpades'),
  143.     (Value: cdQueenofSpades;   Name: 'cdQueenofSpades'),
  144.     (Value: cdKingofSpades;    Name: 'cdKingofSpades'),
  145.  
  146.     (Value: cdAceofHearts;     Name: 'cdAceofHearts'),
  147.     (Value: cd2ofHearts;       Name: 'cd2ofHearts'),
  148.     (Value: cd3ofHearts;       Name: 'cd3ofHearts'),
  149.     (Value: cd4ofHearts;       Name: 'cd4ofHearts'),
  150.     (Value: cd5ofHearts;       Name: 'cd5ofHearts'),
  151.     (Value: cd6ofHearts;       Name: 'cd6ofHearts'),
  152.     (Value: cd7ofHearts;       Name: 'cd7ofHearts'),
  153.     (Value: cd8ofHearts;       Name: 'cd8ofHearts'),
  154.     (Value: cd9ofHearts;       Name: 'cd9ofHearts'),
  155.     (Value: cd10ofHearts;      Name: 'cd10ofHearts'),
  156.     (Value: cdJackofHearts;    Name: 'cdJackofHearts'),
  157.     (Value: cdQueenofHearts;   Name: 'cdQueenofHearts'),
  158.     (Value: cdKingofHearts;    Name: 'cdKingofHearts'),
  159.  
  160.     (Value: cdAceofClubs;      Name: 'cdAceofClubs'),
  161.     (Value: cd2ofClubs ;       Name: 'cd2ofClubs'),
  162.     (Value: cd3ofClubs ;       Name: 'cd3ofClubs'),
  163.     (Value: cd4ofClubs ;       Name: 'cd4ofClubs'),
  164.     (Value: cd5ofClubs ;       Name: 'cd5ofClubs'),
  165.     (Value: cd6ofClubs ;       Name: 'cd6ofClubs'),
  166.     (Value: cd7ofClubs ;       Name: 'cd7ofClubs'),
  167.     (Value: cd8ofClubs ;       Name: 'cd8ofClubs'),
  168.     (Value: cd9ofClubs ;       Name: 'cd9ofClubs'),
  169.     (Value: cd10ofClubs;       Name: 'cd10ofClubs'),
  170.     (Value: cdJackofClubs;     Name: 'cdJackofClubs'),
  171.     (Value: cdQueenofClubs;    Name: 'cdQueenofClubs'),
  172.     (Value: cdKingofClubs;     Name: 'cdKingofClubs'),
  173.  
  174.     (Value: cdAceofDiamonds;   Name: 'cdAceofDiamonds'),
  175.     (Value: cd2ofDiamonds;     Name: 'cd2ofDiamonds'),
  176.     (Value: cd3ofDiamonds;     Name: 'cd3ofDiamonds'),
  177.     (Value: cd4ofDiamonds;     Name: 'cd4ofDiamonds'),
  178.     (Value: cd5ofDiamonds;     Name: 'cd5ofDiamonds'),
  179.     (Value: cd6ofDiamonds;     Name: 'cd6ofDiamonds'),
  180.     (Value: cd7ofDiamonds;     Name: 'cd7ofDiamonds'),
  181.     (Value: cd8ofDiamonds;     Name: 'cd8ofDiamonds'),
  182.     (Value: cd9ofDiamonds;     Name: 'cd9ofDiamonds'),
  183.     (Value: cd10ofDiamonds;    Name: 'cd10ofDiamonds'),
  184.     (Value: cdJackofDiamonds;  Name: 'cdJackofDiamonds'),
  185.     (Value: cdQueenofDiamonds; Name: 'cdQueenofDiamonds'),
  186.     (Value: cdKingofDiamonds;  Name: 'cdKingofDiamonds'),
  187.  
  188.     (Value: CdJoker;           Name: 'CdJoker'),
  189.     (Value: cdCardBack1;       Name: 'cdCardBack1'),
  190.     (Value: cdCardBack2;       Name: 'cdCardBack2'),
  191.     (Value: cdCardBack3;       Name: 'cdCardBack3'),
  192.     (Value: cdCardBack4;       Name: 'cdCardBack4'),
  193.     (Value: cdCardBack5;       Name: 'cdCardBack5'),
  194.     (Value: cdCardBack6;       Name: 'cdCardBack6'),
  195.     (Value: cdCardBack7;       Name: 'cdCardBack7'),
  196.     (Value: cdCardBack8;       Name: 'cdCardBack8'),
  197.     (Value: cdCardBack9;       Name: 'cdCardBack9') );
  198.  
  199. type
  200.   {Create a custom property editor for cdCardDeck,
  201.    allows user to type in name of card, typein number of card,
  202.    or select card from list}
  203.   TCardValueProperty = class(TIntegerProperty)
  204.   public
  205.     function GetAttributes: TPropertyAttributes; override;
  206.     function GetValue: string; override;
  207.     procedure GetValues(Proc: TGetStrProc); override;
  208.     procedure SetValue(const Value: string); override;
  209.   end;
  210.  
  211. {Now create TCardDeck}
  212. type
  213.   TCardDeck = class(TGraphicControl)
  214.  
  215.   private
  216.     { Private declarations }
  217.     FValue: cdCardDeck;         {the value of the card being diplayed 1..62}
  218.     FStretch: Boolean;          {stretch bitmap to fit client?}
  219.     procedure SetValue(Value: cdCardDeck);
  220.     procedure SetStretch(Value: Boolean);
  221.  
  222.   protected
  223.     { Protected declarations }
  224.     procedure Paint; override;  {override paint so can paint card faces}
  225.  
  226.   public
  227.     { Public declarations }
  228.     constructor Create(AOwner: TComponent); override; {so can set default}
  229.  
  230.   published
  231.     { Published declarations }
  232.     property Value: cdCardDeck read FValue write SetValue default cdAceofSpades;
  233.     property Stretch: Boolean read FStretch write SetStretch default False;
  234.     {surface the drag and drop events so programers can make dragable cards}
  235.     property DragCursor;
  236.     property DragMode;
  237.     property OnDragDrop;
  238.     property OnDragOver;
  239.     property OnEndDrag;
  240.     property OnM